import axios from 'axios';
import { showToast } from 'vant';
import envConfig from './env';

// 获取API地址
const getAPIUrl = () => {
    // 使用环境配置中的API地址
    const apiUrl = envConfig.apiUrl;
    console.log('当前API地址:', apiUrl);
    return apiUrl;
};

// 导出配置
export const baseURL = getAPIUrl();
export const timeout = 30000;
export const headers = {
    'Content-Type': 'application/json',
    'Accept': 'application/json'
};

// 创建 axios 实例
const request = axios.create({
    baseURL,
    timeout,
    headers,
    // 允许跨域请求
    withCredentials: false
});

// 检查网络连接
const checkNetwork = () => {
    if (!navigator.onLine) {
        showToast('网络连接已断开，请检查网络设置');
        return false;
    }
    return true;
};

// 请求拦截器
request.interceptors.request.use(
    config => {
        // 检查网络连接
        if (!checkNetwork()) {
            return Promise.reject(new Error('网络连接已断开'));
        }

        // 确保请求方法存在
        if (!config.method) {
            config.method = 'GET';
        }

        // 确保baseURL存在
        if (!config.baseURL) {
            config.baseURL = getAPIUrl();
        }

        // 从 localStorage 获取 token
        const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}');
        if (userInfo.token) {
            config.headers.Authorization = `Bearer ${userInfo.token}`;
        }
        
        // 打印请求信息
        console.log('发送请求:', {
            url: config.url,
            method: config.method,
            headers: config.headers,
            data: config.data,
            baseURL: config.baseURL,
            fullUrl: `${config.baseURL}${config.url}`
        });
        
        return config;
    },
    error => {
        console.error('请求错误:', error);
        return Promise.reject(error);
    }
);

// 响应拦截器
request.interceptors.response.use(
    response => {
        // 打印响应信息
        console.log('收到响应:', {
            status: response.status,
            data: response.data,
            headers: response.headers,
            config: {
                url: response.config.url,
                method: response.config.method,
                baseURL: response.config.baseURL,
                fullUrl: `${response.config.baseURL}${response.config.url}`
            }
        });
        return response;
    },
    error => {
        // 详细打印错误信息
        console.error('响应错误详情:', {
            message: error.message,
            code: error.code,
            response: error.response ? {
                status: error.response.status,
                data: error.response.data,
                headers: error.response.headers
            } : null,
            request: error.request ? {
                method: error.request.method,
                url: error.request.url,
                headers: error.request.headers
            } : null,
            config: error.config ? {
                url: error.config.url,
                method: error.config.method,
                headers: error.config.headers,
                data: error.config.data,
                baseURL: error.config.baseURL,
                fullUrl: `${error.config.baseURL}${error.config.url}`
            } : null,
            network: {
                online: navigator.onLine,
                connectionType: navigator.connection ? navigator.connection.type : 'unknown',
                effectiveType: navigator.connection ? navigator.connection.effectiveType : 'unknown'
            }
        });
        
        // 处理不同类型的错误
        if (error.code === 'ECONNABORTED') {
            showToast('请求超时，请检查网络连接');
        } else if (error.message.includes('Network Error')) {
            // 检查网络连接
            if (navigator.onLine) {
                console.error('网络连接正常但请求失败，可能的原因：', {
                    baseURL: error.config?.baseURL,
                    url: error.config?.url,
                    method: error.config?.method,
                    headers: error.config?.headers,
                    fullUrl: error.config ? `${error.config.baseURL}${error.config.url}` : 'unknown',
                    network: {
                        online: navigator.onLine,
                        connectionType: navigator.connection ? navigator.connection.type : 'unknown',
                        effectiveType: navigator.connection ? navigator.connection.effectiveType : 'unknown'
                    }
                });
                showToast('无法连接到服务器，请检查服务器地址');
            } else {
                showToast('网络连接已断开，请检查网络设置');
            }
        } else if (error.response) {
            switch (error.response.status) {
                case 401:
                    showToast('登录已过期，请重新登录');
                    localStorage.removeItem('userInfo');
                    break;
                case 404:
                    showToast('请求的资源不存在');
                    break;
                case 500:
                    showToast('服务器错误，请稍后重试');
                    break;
                default:
                    showToast(error.response.data?.message || '请求失败，请稍后重试');
            }
        } else {
            showToast('未知错误，请稍后重试');
        }
        
        return Promise.reject(error);
    }
);

export default request; 